# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.

from odoo import fields, models, api

import logging
_logger = logging.getLogger(__name__)


class IotDevice(models.Model):
    _name = "iot.device"
    _description = 'IotDevice'
    _order = "name"

    user_id = fields.Many2one('res.users', 'User',
                              default=lambda self: self.env.uid, index=True)

    partner_id = fields.Many2one('res.partner', 'Partner',
                                 related='user_id.partner_id', store=True, index=True)

    company_id = fields.Many2one('res.company', 'Company',
                                 default=lambda self: self.env.company, index=True)

    gateway_id = fields.Many2one('iot.gateway', 'Gateway', index=True)

    project_id = fields.Many2one('iot.project', 'Project', index=True)

    sensor_ids = fields.One2many('iot.sensor', 'device_id', string='Sensors')

    name = fields.Char(index=True, copy=False)
    code = fields.Char(index=True, copy=False)

    router_code = fields.Char(string='Router Code', related='gateway_id.code')

    latitude = fields.Float(string='Latitude', digits=(16, 5))
    longitude = fields.Float(string='Longitude', digits=(16, 5))

    interval = fields.Integer(string='Interval', help="UOM s")

    last_etl_time = fields.Datetime(string="Last Check Time")

    _sql_constraints = [
        ('unique_code', 'UNIQUE (code)',  'code is unique!')
    ]

    @api.model
    @api.returns('self', lambda value: value.id)
    def find_or_create(self, values):
        print('find_or_create,values: ', values)
        code = values['code']
        domain = [('code', '=', code)]
        obj = self.search(domain, limit=1)
        print('find_or_create, search: ', obj)
        if obj:
            return obj

        print('find_or_create, create: ')
        return self.create(values)
